import org.junit.Test;

//给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
//        请你将两个数相加，并以相同形式返回一个表示和的链表。
//        你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
//        链接：https://leetcode-cn.com/problems/add-two-numbers
public class Solution2 {
    @Test
    public void test01(){
        ListNode listNode1 = new ListNode(9,new ListNode(9,new ListNode(9,new ListNode(9,new ListNode(9,new ListNode(9,new ListNode(9)))))));
        ListNode listNode2 = new ListNode(9,new ListNode(9,new ListNode(9,new ListNode(9))));
        System.out.println(toStr(addTwoNumbers(listNode1,listNode2)));
    }
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        return getTotal(l1,l2,0);
    }
    public ListNode getTotal(ListNode l1, ListNode l2,int carry){
        if(l1==null&&l2==null&&carry==0){//可能都为null但是进了一位
            return null;
        }
        int val = (l1==null?0:l1.val) + (l2==null?0:l2.val) + carry;
        if(val>=10){
            val = val - 10;
            carry = 1;
        }else{
            carry = 0;
        }
        ListNode node = new ListNode(val);
        //取空值的属性会报错
        node.next =  getTotal(l1==null?l1:l1.next,l2==null?l2:l2.next,carry);
        return node;
    }
    public int toStr(ListNode node){
        String s = "";
        do {
            s+=node.val;
            node = node.next;
        }while (node!=null);
        return Integer.parseInt(s);
    }
}
